package cn.itsource._04_rabbitmq_derict;


import cn.itsource.util.ConnectionUtil;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;

/**
 * 使用定向发送消息
 * 1.发送者需要定义一个交换机
 * 2.发送者需要定义发送的routingkey
 * 3.发送的消息在没有被消费者消费之前不会存在丢失，而广播模式的话会出现数据丢失的情况
 * 4.消费者需要定义一个队列，并且需要绑定将队列和交换机进行绑定，根据需要接受的消息设置routingkey的值
 * 5.只有接受者和消费者的routingkey一样的时候才会将消息消费
 */
//消息发送者
public class send4 {
    //定义一个交换机的名字
    public static final String EXCHANGE_NAME_DERECT = "exchange_name_derect";

    public static void main(String[] args) throws Exception {


        //获取连接对象
        Connection connection = ConnectionUtil.getConnection();
        //创建通道
        Channel channel = connection.createChannel();
         //声明交换机
        channel.exchangeDeclare(EXCHANGE_NAME_DERECT,"direct");
        //消息内容
        String news = "wo shi a news";
        /**
         * 消息发布方法
         * param1：Exchange的名称，如果没有指定，则使用Default Exchange
         * param2:routingKey,消息的路由Key，是用于Exchange（交换机）将消息转发到指定的消息队列
         * param3:消息包含的属性
         * param4：消息体
         */
        /**
         * 这里没有指定交换机，消息将发送给默认交换机，每个队列也会绑定那个默认的交换机，但是不能显
         示绑定或解除绑定
         * 默认的交换机，routingKey等于队列名称
         */
        channel.basicPublish(EXCHANGE_NAME_DERECT, "add", null, news.getBytes());
        System.out.println("消息发送成功");
    }
}
